/*
 * Copyright (C), 2013-2016, 汇通达网络有限公司
 * FileName: DalBaseMyBatis.java
 * Author:   杨振宁
 * Date:     2016-7-30 下午2:15:12
 * Description: //模块目的、功能描述      
 * History: //修改记录
 * <author>      <time>      <version>    <desc>
 * 修改人姓名             修改时间            版本号                  描述
 */
package com.htd.htdapmcommon.mybatis;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;


public abstract class DalBaseMyBatis<T> {
	
	private Class<T> entityClass;
	
	@Autowired
    protected SqlSessionTemplate sqlSessionTemplate;
	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public DalBaseMyBatis(){
		Type genType = getClass().getGenericSuperclass();  
        Type[] params = ((ParameterizedType) genType).getActualTypeArguments();  
        entityClass = (Class) params[0];       
	}
	
	/**
	 * 获取T对象
	 * 功能描述: <br>
	 * 〈功能详细描述〉
	 *
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	public Class<T> getEntity(){
		return this.entityClass;
	}
	
	/**
	 * 获取T完整包名加T名称
	 * 功能描述: <br>
	 * 〈功能详细描述〉
	 *
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	public String getEntityName(){
		return this.entityClass.getName();
	}
	
	/**
	 * 基类getByID实现
	 * 功能描述: <br>
	 * 〈功能详细描述〉
	 *
	 * @param id
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	public T getByID(int id){
		return this.sqlSessionTemplate.selectOne(this.getEntityName()+".getByID",id);
	}
	
	/**
	 * 基类deleteById实现
	 * 功能描述: <br>
	 * 〈功能详细描述〉
	 *
	 * @param id
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	public int deleteById(int id){
		return this.sqlSessionTemplate.delete(this.getEntityName()+".deleteById",id) ;
	}
	
	/***
	 * 基类insertEntity实现
	 * 功能描述: <br>
	 * 〈功能详细描述〉
	 *
	 * @param entity
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	public int insert(T entity){
		return this.sqlSessionTemplate.insert(this.getEntityName()+".insert", entity);
	}
	
	/**
	 * 基类updateEntity实现
	 * 功能描述: <br>
	 * 〈功能详细描述〉
	 *
	 * @param entity
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	public int updateEntity(T entity){
		return this.sqlSessionTemplate.update(this.getEntityName()+".updateEntity",entity);
	}
	
	
}
